package com.didispace.alibaba.nacos.discovery.client;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;


@EnableDiscoveryClient  // 先通过@EnableFeignClients注解开启扫描Spring Cloud Feign客户端的功能
@SpringBootApplication
@EnableFeignClients
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Slf4j
    @RestController
    static class TestController {
        @Autowired
        Client client;  // 注入了Client接口的实现，并调用hello方法来触发对服务提供方的调用

        @GetMapping("/test")
        public String test() {
            String result = client.hello("didi");
            return "Return : " + result;
        }
    }

    // 绑定alibaba-nacos-discovery-server服务的/hello接口
    // RestTemplate和WebClient都是Spring自己封装的工具，下面介绍一个Netflix OSS中的成员，通过它可以更方便的定义和使用服务消费客户端。
    @FeignClient("alibaba-nacos-discovery-server")  // 使用 @FeignClient 注解来指定这个接口所要调用的服务名称，
    interface Client {  // 创建一个Feign的客户端接口定义，接口中定义的各个函数使用Spring MVC的注解就可以来绑定服务提供方的REST接口

        @GetMapping("/hello")
        String hello(@RequestParam(name = "name") String name);

    }
}